package StoreServerSide;

import genclass.GenericIO;

/**
 *   Este tipo de dados simula uma solução do lado do servidor do Problema dos Barbeiros Sonolentos que implementa o
 *   modelo cliente-servidor de tipo 2 (replicação do servidor) com lançamento estático dos threads barbeiro.
 *   A comunicação baseia-se em passagem de mensagens sobre sockets usando o protocolo TCP.
 */
public class StoreServer {

    /**
     *  Número do port de escuta do serviço a ser prestado (4000, por defeito)
     *
     *    @serialField portNumb
     */
    private static final int portNumb = 4000;

    /**
     *  Programa principal.
     */
    public static void main(String[] args) {
        int nCustomer = 3;
        int nProducts = 3;
        StoreMonitor store;                                    // barbearia (representa o serviço a ser prestado)
        StoreMonitorInterface storeInter;                      // interface à barbearia
        ServerCom scon, sconi;                               // canais de comunicação
        ClientProxy cliProxy;                                // thread agente prestador do serviço

        /* estabelecimento do servico */

        scon = new ServerCom(portNumb);                     // criação do canal de escuta e sua associação
        scon.start();                                       // com o endereço público
        store = new StoreMonitor(nCustomer, nProducts);                           // activação do serviço
        storeInter = new StoreMonitorInterface(store);        // activação do interface com o serviço
        GenericIO.writelnString("O serviço STORE foi estabelecido!");
        GenericIO.writelnString("O servidor STORE esta em escuta.");

        /* processamento de pedidos */

        while (true) {
            sconi = scon.accept();                            // entrada em processo de escuta
            cliProxy = new ClientProxy(sconi, storeInter);    // lançamento do agente prestador do serviço
            cliProxy.start();
        }
    }
}
